import {connect, withFragments} from 'plugin-api/beta/client/hocs';
import {bindActionCreators} from 'redux';
import ViewingOptions from '../components/ViewingOptions';
import {openMenu, closeMenu} from '../actions';
import {compose, gql} from 'react-apollo';
import {getSlotFragmentSpreads} from 'plugin-api/beta/client/utils';

const slots = [
  'viewingOptionsSort',
  'viewingOptionsFilter',
];

const mapStateToProps = ({talkPluginViewingOptions: state}) => ({
  open: state.open
});

const mapDispatchToProps = (dispatch) =>
  bindActionCreators({openMenu, closeMenu}, dispatch);

const withViewingOptionsFragments = withFragments({
  root: gql`
    fragment TalkViewingOptions_ViewingOptions_root on RootQuery {
      __typename
      ${getSlotFragmentSpreads(slots, 'root')}
    }`,
  asset: gql`
    fragment TalkViewingOptions_ViewingOptions_asset on Asset {
      __typename
      ${getSlotFragmentSpreads(slots, 'asset')}
    }`,
});

const enhance = compose(
  connect(mapStateToProps, mapDispatchToProps),
  withViewingOptionsFragments,
);

export default enhance(ViewingOptions);
